package ldh.im.fxbase.service;

import ldh.im.dto.business.item.ConfigItem;
import ldh.im.fxbase.dao.ImConfigDao;
import ldh.im.fxbase.data.pojo.ImConfig;
import ldh.im.fxbase.data.pojo.status.ImConfigStatus;
import ldh.im.fxbase.util.BeanFactory;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class ConfigService {

    private ImConfigDao configDao = BeanFactory.getInstance().getBean(ImConfigDao.class);

    public void updateOrInsert(String userId, List<ConfigItem> configItems) throws SQLException {
        if (configItems.size() < 1) return;

        List<ImConfig> imConfigList = configItems.stream().map(cinfo->toConfig(userId, cinfo)).collect(Collectors.toList());

        List<ImConfig> insertImConfigList = new ArrayList<>();
        List<ImConfig> updateImConfigList = new ArrayList<>();

        for(ImConfig imConfig : imConfigList) {
            ImConfig dbConfig = configDao.getByUserIdAndName(imConfig.getCurrentUserId(), imConfig.getName());
            if (dbConfig == null) {
                insertImConfigList.add(imConfig);
            } else {
                imConfig.setId(dbConfig.getId());
                updateImConfigList.add(imConfig);
            }
        }
        if (insertImConfigList.size() > 0) {
            configDao.batchInserts(insertImConfigList);
        }
        if (updateImConfigList.size() > 0) {
            configDao.batchUpdates(updateImConfigList);
        }
    }

    private ImConfig toConfig(String userId, ConfigItem cinfo) {
        ImConfig config = new ImConfig();
        config.setName(cinfo.getName());
        config.setContent(cinfo.getContent());
        config.setCurrentUserId(userId);
        config.setStatus(ImConfigStatus.wrap(cinfo.getStatus()));
        return config;
    }
}
